/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.projetoObras.controller;

import br.com.projetoObras.model.Artist;
import br.com.projetoObras.model.ImageDB;
import br.com.projetoObras.model.Work;
import br.com.projetoObras.model.dao.ArtistDAO;
import br.com.projetoObras.model.dao.DAO;
import br.com.projetoObras.model.dao.InterfaceArtistDAO;
import br.com.projetoObras.view.ArtistRegistryView;
import br.com.projetoObras.view.ArtistSearchView;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JRadioButton;

/**
 *
 * @author viniciusvdias
 */
public class ArtistController {
    
    private InterfaceArtistDAO artistDAO;
    
    public ArtistController() throws SQLException{
        this.artistDAO = new ArtistDAO();
    }
    
    public void createArtist(ArtistRegistryView artist_view) throws ParseException, SQLException{        
        String sexo = "f";
        
        if(artist_view.getRbt_sexo_masc().isSelected())
            sexo = "m";
        
        setModelArtist(artist_view, new String[]{
            null,
            artist_view.getTxt_nome().getText(),
            artist_view.getTxt_sobrenome().getText(),
            artist_view.getTxt_nome_civil().getText(),
            artist_view.getTxt_nacionalidade().getText(),
            sexo,
            artist_view.getTxt_cidade().getText(),
            artist_view.getTxt_estado().getText(),
            artist_view.getTxt_pais().getText(),
            artist_view.getTxt_data_nasc().getText(),
            artist_view.getTxt_data_falec().getText(),
            artist_view.getTxt_contato().getText(),
            artist_view.getTxt_biografia().getText(),
            artist_view.getTxt_foto().getText()           
        });
        
        this.artistDAO.saveArtist(artist_view.getArtist());
    }
    
    public List<Artist> getArtists(String search_str) throws SQLException, IOException{
        ResultSet rs = this.artistDAO.searchArtist(search_str);
        int ncolumns = rs.getMetaData().getColumnCount();
        List<Artist> artists = new ArrayList<Artist>();
        String aux;
        Artist a;
        
        while(rs.next()){
            a = new Artist();
            a.setCodigo(rs.getInt("cod_artista"));
            a.setNome(rs.getString("nome"));
            a.setSobrenome(rs.getString("sobrenome"));
            a.setNome_civil(rs.getString("nome_civil"));
            a.setNacionalidade(rs.getString("nacionalidade"));
            try{
                a.setSexo(rs.getString("sexo").charAt(0));
            } catch (Exception ex){
                a.setSexo(null);
                Logger.getLogger(ArtistController.class.getName()).log(Level.SEVERE, null, ex);
            }
            a.setCidade(rs.getString("cidade"));
            a.setEstado(rs.getString("estado"));
            a.setPais(rs.getString("pais"));       

            a.setData_nasc(rs.getDate("data_nascimento"));
            a.setData_falec(rs.getDate("data_falecimento"));
            
            a.setContato(rs.getString("contato_artista"));
            a.setBiografia(rs.getString("biografia"));
            
            aux = rs.getString("foto");
            
            if(aux!=null && !aux.isEmpty()){
                File temp = new File(Artist.temp_foto_path+"artista"+(artists.size()+1));
                temp.deleteOnExit();
                a.setFoto(temp);
            }
            
            artists.add(a);
        }
        
        return artists;
    }
    
    public void atualizaArtistView(ArtistRegistryView m_artist, Artist artist_model){
        m_artist.getTxt_nome().setText(artist_model.getNome());
        m_artist.getTxt_nome().setEnabled(false);
        m_artist.getTxt_sobrenome().setText(artist_model.getSobrenome());
        m_artist.getTxt_sobrenome().setEnabled(false);
        m_artist.getTxt_nome_civil().setText(artist_model.getNome_civil());
        m_artist.getTxt_nome_civil().setEnabled(false);
        m_artist.getTxt_nacionalidade().setText(artist_model.getNacionalidade());
        m_artist.getTxt_nacionalidade().setEnabled(false);
        if(artist_model.getSexo()!=null &&
                (artist_model.getSexo()=='m' || artist_model.getSexo()=='M'))
            m_artist.getRbt_sexo_masc().setSelected(true);
        else
            m_artist.getRbt_sexo_fem().setSelected(true);
        m_artist.getRbt_sexo_fem().setEnabled(false);
        m_artist.getRbt_sexo_masc().setEnabled(false);
        m_artist.getTxt_cidade().setText(artist_model.getCidade());
        m_artist.getTxt_cidade().setEnabled(false);
        m_artist.getTxt_estado().setText(artist_model.getEstado());
        m_artist.getTxt_estado().setEnabled(false);
        m_artist.getTxt_pais().setText(artist_model.getPais());
        m_artist.getTxt_pais().setEnabled(false);
        if(artist_model.getData_nasc()!=null)
            m_artist.getTxt_data_nasc().setText(Artist.f_date.format(artist_model.getData_nasc()));
        m_artist.getTxt_data_nasc().setEnabled(false);
        if(artist_model.getData_falec()!=null)
            m_artist.getTxt_data_falec().setText(Artist.f_date.format(artist_model.getData_falec()));
        m_artist.getTxt_data_falec().setEnabled(false);
        m_artist.getTxt_contato().setText(artist_model.getContato());
        m_artist.getTxt_contato().setEnabled(false);
        m_artist.getTxt_biografia().setText(artist_model.getBiografia());
        m_artist.getTxt_biografia().setEnabled(false);
        if(artist_model.getFoto()!=null)
            m_artist.getTxt_foto().setText(artist_model.getFoto().getAbsolutePath());
        else
            m_artist.getTxt_foto().setText(null);
        m_artist.getTxt_foto().setEnabled(false);
    }
    
    public void setModelArtist(ArtistRegistryView artist_view, String[] row) throws ParseException{        
        
        Artist artist_model = new Artist();
        
        if(row[0]!=null && !row[0].isEmpty())
            artist_model.setCodigo(Integer.valueOf(row[0]));
        artist_model.setNome(row[1]);
        artist_model.setSobrenome(row[2]);
        artist_model.setNome_civil(row[3]);
        artist_model.setNacionalidade(row[4]);
        artist_model.setSexo(row[5].charAt(0));
        artist_model.setCidade(row[6]);
        artist_model.setEstado(row[7]);
        artist_model.setPais(row[8]);       
        
        String datestr = row[9];
        if(datestr != null && !datestr.isEmpty())
            artist_model.setData_nasc(
                    new Date(
                        Artist.f_date.parse(datestr).getTime()
                    )
            );
            
        datestr = row[10];
        if(datestr != null && !datestr.isEmpty())
            artist_model.setData_falec(
                    new Date(
                        Artist.f_date.parse(datestr).getTime()
                    )
            );
        
        artist_model.setContato(row[11]);
        artist_model.setBiografia(row[12]);
        if(row[13]!=null && !row[13].isEmpty())
            artist_model.setFoto(new File(row[13]));
        
        artist_view.setArtist(artist_model);
    }
    
    public void updateArtist(ArtistRegistryView artist_view) throws SQLException, ParseException{
        String sexo = "f";
        
        if(artist_view.getRbt_sexo_masc().isSelected())
            sexo = "m";
        
        setModelArtist(artist_view, new String[]{
            String.valueOf(artist_view.getArtist().getCodigo()),
            artist_view.getTxt_nome().getText(),
            artist_view.getTxt_sobrenome().getText(),
            artist_view.getTxt_nome_civil().getText(),
            artist_view.getTxt_nacionalidade().getText(),
            sexo,
            artist_view.getTxt_cidade().getText(),
            artist_view.getTxt_estado().getText(),
            artist_view.getTxt_pais().getText(),
            artist_view.getTxt_data_nasc().getText(),
            artist_view.getTxt_data_falec().getText(),
            artist_view.getTxt_contato().getText(),
            artist_view.getTxt_biografia().getText(),
            artist_view.getTxt_foto().getText()          
        });
        
        this.artistDAO.updateArtist(artist_view.getArtist());
    }
    
    public void deleteArtist(ArtistRegistryView artist_view) throws SQLException{
        artistDAO.deleteArtist(artist_view.getArtist());
        artist_view.setVisible(false);
    }
    
}
